﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CityGames;

namespace CityGamesWeb
{
    public partial class Carro3 : System.Web.UI.Page
    {
        string dni = "";
        Socio socio = new Socio();
        static private Juego juego = new Juego();
        private Factura factura = new Factura();
        private LineaFactura lineaFactura = new LineaFactura();
        private CopiaFisica copia = new CopiaFisica();
        double totalConIVA = 0;

        protected void Page_Load(object sender, EventArgs e)
        {
            int num = 0;

            try
            {
                if (Session["numeroJuegos"] != null)
                    num = (int)(Session["numeroJuegos"]);

                if (num > 0)
                {
                    if (Session["usuario"] != null)     //Si esta logueado
                    {
                        dni = Session["usuario"].ToString();
                        LoadUsuario(dni);
                        CargarCarro();
                    }
                    else
                    {
                        Response.Redirect("Carro2.aspx");
                    }
                }
                else
                    Response.Redirect("Carro1.aspx");
            }
            catch (Exception ex)
            {

            }       
        }

        protected void LoadUsuario(string dni)
        {
            socio = socio.DatosSocio(dni);

            try
            {
                DatosCliente.Text += socio.Nombre + " " + socio.Apellidos + "<br />";
                DatosCliente.Text += "DNI: " + socio.Dni + "<br />";
                DatosCliente.Text += socio.Direccion + "<br />";
                DatosCliente.Text += "CP: " + "<br />";
                DatosCliente.Text += socio.Localidad + ", " + socio.Provincia + "<br />";
            }
            catch (Exception ex)
            {

            }


        }

        protected void CargarCarro()
        {
            int num = 0;
            double subtotal = 0;
            double total = 0;
            
            try
            {
                totalConIVA = 0;
                if (Session["numeroJuegos"] != null)
                    num = (int)(Session["numeroJuegos"]);

                for (int i = 1; i <= num; i++)
                {
                    string nombre = Session["juego" + i.ToString()].ToString();
                    string plataforma = Session["plataforma" + i.ToString()].ToString();
                    string cantidad = Session["cantidad" + i.ToString()].ToString();
                    string tipo = Session["tipo" + i.ToString()].ToString();
                    Promocion promo = new Promocion();

                    string[] promocion;
                    string precio;

                    //Crea la nueva Fila
                    TableRow fila = new TableRow();
                    TCarro.Rows.Add(fila);


                    //COLUMNA CANTIDAD
                    //Crea la celda del Cantidad
                    TableCell celdaCantidad = new TableCell();
                    fila.Cells.Add(celdaCantidad);
                    celdaCantidad.Width = System.Web.UI.WebControls.Unit.Parse("5%");
                    celdaCantidad.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
                    celdaCantidad.ID = "CeldaCantidad" + i.ToString();
                    celdaCantidad.Text = cantidad;


                    //COLUMNA PRODUCTO
                    //Crea la celda del Producto
                    TableCell celdaProducto = new TableCell();
                    fila.Cells.Add(celdaProducto);
                    celdaProducto.Width = System.Web.UI.WebControls.Unit.Parse("55%");
                    celdaProducto.Text = nombre + '(' + plataforma + ')';

                    if (tipo == "segunda")
                        celdaProducto.Text += "(Segunda Mano)";

                    //COLUMNA Precio
                    //Crea la celda del Precio
                    TableCell celdaPrecio = new TableCell();
                    fila.Cells.Add(celdaPrecio);
                    celdaPrecio.Width = System.Web.UI.WebControls.Unit.Parse("10%");
                    celdaPrecio.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
                    celdaPrecio.ID = "Precio" + i.ToString();

                    precio = juego.GetPrecio(nombre, plataforma, tipo);
                    celdaPrecio.Text = Math.Round((double.Parse(precio) / 1.18),2).ToString();


                    //COLUMNA DESCUENTO
                    //Crea la celda del Promocion
                    TableCell celdaPromocion = new TableCell();
                    fila.Cells.Add(celdaPromocion);
                    celdaPromocion.Width = System.Web.UI.WebControls.Unit.Parse("20%");
                    celdaPromocion.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;
                    promocion = promo.GetTipoPromocion(nombre, plataforma);


                    //COLUMNA Total
                    //Crea la celda del Total
                    TableCell celdaSubTotal = new TableCell();
                    fila.Cells.Add(celdaSubTotal);
                    celdaSubTotal.Width = System.Web.UI.WebControls.Unit.Parse("10%");
                    celdaSubTotal.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;


                    if (promocion[0] == "2X1")
                    {
                        celdaPromocion.Text = promocion[0];
                        int cantidadRed = int.Parse(cantidad) / 2;
                        if (double.Parse(cantidad) % 2 > 0)
                            cantidadRed++;

                        totalConIVA += cantidadRed * double.Parse(precio);
                        subtotal = (cantidadRed * double.Parse(precio)) / 1.18;
                    }
                    else if (promocion[0] == "Descuento en €")
                    {
                        celdaPromocion.Text = "Descuento de " + Math.Round(double.Parse(promocion[1])/1.18,2) + " €.";

                        double precioConPromo = 0;
                        if (double.Parse(promocion[1]) < double.Parse(precio))
                        {
                            precioConPromo = double.Parse(precio) - double.Parse(promocion[1]);
                        }
                        subtotal = (precioConPromo * int.Parse(cantidad)) / 1.18;
                        totalConIVA += (precioConPromo * int.Parse(cantidad));
                    }
                    else if (promocion[0] == "Descuento en %")
                    {
                        celdaPromocion.Text = "Descuento de " + Math.Round(double.Parse(promocion[1]),2) + " %.";

                        double precioConPromo = 0;
                        precioConPromo = double.Parse(precio) * (1 - (double.Parse(promocion[1]) / 100));

                        subtotal = ((precioConPromo * int.Parse(cantidad)) / 1.18);
                        totalConIVA += (precioConPromo * int.Parse(cantidad));
                    }
                    else
                    {
                        celdaPromocion.Text = "Ninguna";
                        
                        subtotal = (double.Parse(celdaPrecio.Text) * int.Parse(cantidad));
                        totalConIVA += subtotal;
                    }
                    total += subtotal;

                    celdaSubTotal.Text = Math.Round(subtotal,2).ToString() + " €";
                    celdaSubTotal.ID = "SubTotal" + i.ToString();                   
                }

                if (num == 0)
                {
                    //Crea la nueva Fila
                    TableRow fila = new TableRow();
                    TCarro.Rows.Add(fila);

                    TableCell celda = new TableCell();
                    fila.Cells.Add(celda);
                    celda.Text = "El carrito está vacio";
                }
                for (int i = 0; i < 2; i++)
                {
                    //Crea la nueva Fila para el total
                    TableRow filaTotal = new TableRow();
                    TCarro.Rows.Add(filaTotal);

                    for (int j = 0; j < 3; j++)
                    {
                        TableCell celdaVacia = new TableCell();
                        filaTotal.Cells.Add(celdaVacia);
                    }
                    TableCell celdaTotalTexto = new TableCell();
                    filaTotal.Cells.Add(celdaTotalTexto);
                    celdaTotalTexto.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Right;                    

                    TableCell celdaTotal = new TableCell();
                    filaTotal.Cells.Add(celdaTotal);
                    celdaTotal.HorizontalAlign = System.Web.UI.WebControls.HorizontalAlign.Center;

                    if (i == 0)
                    {
                        celdaTotalTexto.Text = "Total";
                        celdaTotal.Text = Math.Round(total,2).ToString() + " €";
                    }
                    else if (i == 1)
                    {
                        celdaTotalTexto.Text = "Total+IVA";
                        totalConIVA = total * 1.18;
                        celdaTotal.Text = Math.Round(totalConIVA,2).ToString() + " €";
                    }
                }
            }
            catch (Exception)
            {

            }
        }

        protected void BtCancelar_Click(object sender, ImageClickEventArgs e)
        {
            Response.Redirect("Carro1.aspx");
        }

        protected void BtConfirmar_Click(object sender, ImageClickEventArgs e)
        {
            decimal deuda = 0;
            int num = 0;

            try
            {
                //CREAR NUEVA FACTURA
                factura.CantEntrega = decimal.Parse(totalConIVA.ToString());
                factura.DNISocio = dni;
                factura.Fecha = DateTime.Now;

                factura.NuevaFactura();


                if (Session["numeroJuegos"] != null)
                    num = (int)(Session["numeroJuegos"]);

                for (int i = 1; i <= num; i++)
                {
                    string nombre = Session["juego" + i.ToString()].ToString();
                    string plataforma = Session["plataforma" + i.ToString()].ToString();
                    int cantidad = int.Parse(Session["cantidad" + i.ToString()].ToString());
                    string tipo = Session["tipo" + i.ToString()].ToString();
                    string numCopia = "";
                    Promocion promo = new Promocion();

                    string[] promocion = promo.GetTipoPromocion(nombre, plataforma);
                    string precio = juego.GetPrecio(nombre, plataforma, tipo);

                    //CREAR LINEAS DE FACTURA
                    for(int j = 0; j < cantidad ; j++)
                    {
                        numCopia = copia.GetNumCopia(nombre, plataforma, tipo);
                        lineaFactura.NumCopia = numCopia;
                        lineaFactura.NumPedido = factura.NumeroUltimaFactura().ToString();

                        if (promocion[0] == "2X1")
                        {
                            int cantidadRed = cantidad / 2;
                            if (double.Parse(cantidad.ToString()) % 2 > 0)
                                cantidadRed++;

                            if (j < cantidadRed)
                            {
                                lineaFactura.Descuento = 0;
                            }
                            else
                            {
                                lineaFactura.Descuento = decimal.Parse(precio);                                
                            }
                        }
                        else if (promocion[0] == "Descuento en €")
                        {
                            lineaFactura.Descuento = decimal.Parse(promocion[1]);                            
                        }
                        else if (promocion[0] == "Descuento en %")
                        {
                            lineaFactura.Descuento = decimal.Parse((double.Parse(precio) * (double.Parse(promocion[1]) / 100)).ToString());
                        }
                        else
                        {
                            lineaFactura.Descuento = 0;
                        }

                        lineaFactura.NuevaLineaFactura();

                        //QUITAR JUEGOS NUEVOS Y 2ª MANO DE LA LISTA DE JUEGOS
                        
                        copia.SetCopiaVendida(numCopia, dni, (decimal.Parse(precio) - lineaFactura.Descuento).ToString());                        
                    }
                }
                CarroSocio carroSocio = new CarroSocio();
                for (int i = 1; i <= num; i++)
                {
                    carroSocio.BorrarJuego(dni, Session["juego" + i.ToString()].ToString(), Session["plataforma" + i.ToString()].ToString(), Session["tipo" + i.ToString()].ToString());

                    Session["juego" + i.ToString()] = null;
                    Session["plataforma" + i.ToString()] = null;
                    Session["cantidad" + i.ToString()] = null;
                    Session["tipo" + i.ToString()] = null;
                }
                Session["numeroJuegos"] = null;

                //vaciar BD carrito

                MyMessageBoxInfo.Show(MyMessageBox.MessageType.Info, "Compra realizada con exito", "Compra", 120, 200);
                Response.Redirect("Carro1.aspx");
            }
            catch (Exception ex)
            {
                MyMessageBoxInfo.Show(MyMessageBox.MessageType.Error, ex.ToString(), "Error", 120, 400);
            }
        }
    }
}